#!/usr/bin/python
# -*- coding: utf-8 -*-
import gtk
import os
import sys
import urllib
import string
import datetime


class Estrazioni():
    def __init__(self,gladeFile):
        self.ruote=["Bari","Cagliari","Firenze","Genova","Milano","Napoli","Palermo","Roma","Torino","Venezia","Nazionale"]
        self.estrazioni=[]
        self.index=0
        #
        # lotto
        #
        self.tree_estr_lotto= gladeFile.get_widget('tree_estr_lotto')
        self.model = gtk.ListStore(str, int, int, int, int, int)
        self.tree_estr_lotto.set_model(self.model)
        cella = gtk.CellRendererText()
        # Definizioni colonne:
        colonna0 = gtk.TreeViewColumn("Ruota", cella, text=0)
        colonna1 = gtk.TreeViewColumn("1°", cella, text=1)
        colonna2 = gtk.TreeViewColumn("2°", cella, text=2)
        colonna3 = gtk.TreeViewColumn("3°", cella, text=3)
        colonna4 = gtk.TreeViewColumn("4°", cella, text=4)
        colonna5 = gtk.TreeViewColumn("5°", cella, text=5)
        # Append delle colonne:
        self.tree_estr_lotto.append_column(colonna0)
        self.tree_estr_lotto.append_column(colonna1)
        self.tree_estr_lotto.append_column(colonna2)
        self.tree_estr_lotto.append_column(colonna3)
        self.tree_estr_lotto.append_column(colonna4)
        self.tree_estr_lotto.append_column(colonna5)
        # Colonne allargabili:
        colonna0.set_expand(True)
        colonna1.set_expand(True)
        colonna2.set_expand(True)
        colonna3.set_expand(True)
        colonna4.set_expand(True)
        colonna5.set_expand(True)
        #
        # 10elotto
        #
        self.tree_estr_10elotto= gladeFile.get_widget('tree_estr_10elotto')
        self.model2 = gtk.ListStore(int, int, int, int, int)
        self.tree_estr_10elotto.set_model(self.model2)
        # Definizioni colonne:
        colonna0 = gtk.TreeViewColumn("", cella, text=0)
        colonna1 = gtk.TreeViewColumn("", cella, text=1)
        colonna2 = gtk.TreeViewColumn("", cella, text=2)
        colonna3 = gtk.TreeViewColumn("", cella, text=3)
        colonna4 = gtk.TreeViewColumn("", cella, text=4)
        self.tree_estr_10elotto.append_column(colonna0)
        self.tree_estr_10elotto.append_column(colonna1)
        self.tree_estr_10elotto.append_column(colonna2)
        self.tree_estr_10elotto.append_column(colonna3)
        self.tree_estr_10elotto.append_column(colonna4)
        colonna0.set_expand(True)
        colonna1.set_expand(True)
        colonna2.set_expand(True)
        colonna3.set_expand(True)
        colonna4.set_expand(True)
        self.combo_estrazione= gladeFile.get_widget('combo_estrazione')

    def estrai_info(self, riga, trova, inizia, fine):
        #estrai_info serve a controllare la presenza e estrarre da una stringa delle informazioni varie
        #basta sapere cosa precede l'informazione e quando è lunga l'informazione stessa (o dove finisce)
        #DESCRIZIONE DELLA FUNZIONE (cosi non lo dimentico):
            #riga è una variabile che deve contenere la stringa dalla quale bisogna fare "l'estrazione"
            #trova è una variabile contenente ciò che bisogna trovare nella 'riga'
            #inizia contiene il numero che rappresenta dopo quanti caratteri si trova ciò che si deve "estrarre"
                #inizia può essere == 0, in tal caso si inizierà a estrarre dal carattere successivo a 'trova'
            #fine indica dove bisogna fermare l'estrazione
                #fine può essere numerico, per indicare dopo quanti caratteri fermarsi
                #o essere una stringa, che, una volta trovata ferma l'estrazione
        if type(riga) is str and type(trova) is str and type(inizia) is int:
            if string.find(riga, trova)!= -1: #se 'riga' contiene 'trova'....
                if type(fine) is str :
                    return riga[string.find(riga, trova)+len(trova)+inizia            : string.find(riga, fine,string.find(riga, trova))] #returni 'l'estratto'
                #                   ↑pozione trova - lunghezza trova↑ - ↑dove inizio  :  ↑posizione fine       ↑ successivo a inizio
                #senza l'ultimo string.find(riga, trova) c'è il rischio che fine sia ripetuto prima di inizio e non funzioni
                elif type(fine) is int : #se fine è intero è molto più facile
                    return riga[string.find(riga, trova)+len(trova)+inizia:string.find(riga, trova)+len(trova)+inizia+fine] #returni 'l'estratto'
                raise TypeError, 'Il 4° argomento è di tipo errato'
            return -1
        raise TypeError, 'Uno degli argomenti è di tipo errato'

    def scarica_est(self):
        sock = urllib.urlopen("http://www.lottomaticaitalia.it/lotto/estrazioni/estrazioni_ultime.do")
        h=sock.readlines()
        i=0
        while "true":
            data=self.estrai_info(h[i],'estrazioni_dettaglio.do?dataConcorso=',0,'">')
            if data<>-1:
                giorno=datetime.date(int(data[0:4]), int(data[5:7]), int(data[8:10])).strftime("%A")
                self.estrazioni.append([data,giorno+" "+self.estrai_info(h[i],'">Estrazione del ',0,'</a>'),[],[]])
                self.combo_estrazione.append_text(giorno+" "+self.estrai_info(h[i],'">Estrazione del ',0,'</a>'))
            if i+1<len(h):
                i=i+1
            else:
                break


    def find_est(self):
        self.model.clear()
        self.model2.clear()
        if self.estrazioni[self.index][2]<>[]:
            for i in self.estrazioni[self.index][2]:
                self.model.append(i)
            for i in self.estrazioni[self.index][3]:
                self.model2.append(i)
        else:
            sock = urllib.urlopen("http://www.lottomaticaitalia.it/lotto/estrazioni/estrazioni_dettaglio.do?dataConcorso="+self.estrazioni[self.index][0])
            h=sock.readlines()
            lista_posizioni_10elotto=[3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60]
            i=j=0
            data=""
            dato=[]
            while "true":
                if self.estrai_info(h[i],'<td scope="row">',0,'</td')==self.ruote[j]:
                    #ho trovato una ruota
                    uno=int(self.estrai_info(h[i+1],'<td class="center">',0,'</td'))
                    due=int(self.estrai_info(h[i+2],'<td class="center">',0,'</td'))
                    tre=int(self.estrai_info(h[i+3],'<td class="center">',0,'</td'))
                    quattro=int(self.estrai_info(h[i+4],'<td class="center">',0,'</td'))
                    cinque=int(self.estrai_info(h[i+5],'<td class="center">',0,'</td'))
                    iter=self.model.append([self.ruote[j],uno,due,tre,quattro,cinque])
                    self.estrazioni[self.index][2].append([self.ruote[j],uno,due,tre,quattro,cinque])
                    if j<10:    #quando j raggiunge 10 ho finito le self.ruote e quindi anche il lotto
                        j=j+1   #altrimenti continuo
                if self.estrai_info(h[i],"I 20 numeri vincenti di 10eLotto",0,0)<>-1:
                    for k in lista_posizioni_10elotto:
                        dato.append(int(self.estrai_info(h[i+k],"<td>",0,"</td>")))
                        #http://www.lottomatica.it/lotto/home/index.html"
                    j=0
                    for i in range(4):
                        iter=self.model2.append([dato[0+j],dato[1+j],dato[3+j],dato[4+j],dato[5+j]])
                        self.estrazioni[self.index][3].append([dato[0+j],dato[1+j],dato[3+j],dato[4+j],dato[5+j]])
                        j=j+4
                    break
                i=i+1

class Ritardatari():
    def __init__(self,gladeFile):
        self.ruote=["Bari","Cagliari","Firenze","Genova","Milano","Napoli","Palermo","Roma","Torino","Venezia","Nazionale"]
        self.tree_ritardatari= gladeFile.get_widget('tree_ritardatari')
        self.model = gtk.ListStore(str, str, str, str)
        self.tree_ritardatari.set_model(self.model)
        cella = gtk.CellRendererText()
        # Definizioni colonne:
        colonna0 = gtk.TreeViewColumn("Ruota", cella, text=0)
        colonna1 = gtk.TreeViewColumn("1°", cella, text=1)
        colonna2 = gtk.TreeViewColumn("2°", cella, text=2)
        colonna3 = gtk.TreeViewColumn("3°", cella, text=3)
        # Append delle colonne:
        self.tree_ritardatari.append_column(colonna0)
        self.tree_ritardatari.append_column(colonna1)
        self.tree_ritardatari.append_column(colonna2)
        self.tree_ritardatari.append_column(colonna3)
        # Colonne allargabili:
        colonna0.set_expand(True)
        colonna1.set_expand(True)
        colonna2.set_expand(True)
        colonna3.set_expand(True)
        self.ritardatari=[]
        self.lblritardatari=gladeFile.get_widget('lblritardatari')

    def estrai_info(self, riga, trova, inizia, fine):
        #estrai_info serve a controllare la presenza e estrarre da una stringa delle informazioni varie
        #basta sapere cosa precede l'informazione e quando è lunga l'informazione stessa (o dove finisce)
        #DESCRIZIONE DELLA FUNZIONE (cosi non lo dimentico):
            #riga è una variabile che deve contenere la stringa dalla quale bisogna fare "l'estrazione"
            #trova è una variabile contenente ciò che bisogna trovare nella 'riga'
            #inizia contiene il numero che rappresenta dopo quanti caratteri si trova ciò che si deve "estrarre"
                #inizia può essere == 0, in tal caso si inizierà a estrarre dal carattere successivo a 'trova'
            #fine indica dove bisogna fermare l'estrazione
                #fine può essere numerico, per indicare dopo quanti caratteri fermarsi
                #o essere una stringa, che, una volta trovata ferma l'estrazione
        if type(riga) is str and type(trova) is str and type(inizia) is int:
            if string.find(riga, trova)!= -1: #se 'riga' contiene 'trova'....
                if type(fine) is str :
                    return riga[string.find(riga, trova)+len(trova)+inizia            : string.find(riga, fine,string.find(riga, trova))] #returni 'l'estratto'
                #                   ↑pozione trova - lunghezza trova↑ - ↑dove inizio  :  ↑posizione fine       ↑ successivo a inizio
                #senza l'ultimo string.find(riga, trova) c'è il rischio che fine sia ripetuto prima di inizio e non funzioni
                elif type(fine) is int : #se fine è intero è molto più facile
                    return riga[string.find(riga, trova)+len(trova)+inizia:string.find(riga, trova)+len(trova)+inizia+fine] #returni 'l'estratto'
                raise TypeError, 'Il 4° argomento è di tipo errato'
            return -1
        raise TypeError, 'Uno degli argomenti è di tipo errato'

    def scarica_rit(self):
        sock = urllib.urlopen("http://www.lottoflash.it/numeri-ritardatari-lotto.asp")
        h=sock.readlines()
        i=0
        while True:
            self.data=self.estrai_info(h[i],"LOTTO NUMERI RITARDATARI AL ",0,"</div>")
            if self.data<>-1:
                #self.lblritardatari.set_use_markup("b")
                self.lblritardatari.set_label("<b>"+self.lblritardatari.get_label()+self.data+"</b>")
            self.numero=self.estrai_info(h[i],"&nbsp; ",0,"&nbsp;(")
            if self.numero<>-1:
                self.ritardo=self.estrai_info(h[i],"&nbsp;(",0,")")
                self.ritardatari.append(self.numero)
                self.ritardatari.append(self.ritardo)
            if len(self.ritardatari)==66:
                break
            else:
                i=i+1
        #mettiamo il tutto nel model
        j=0
        for i in range(11):
            self.riga=[]
            self.riga.append(self.ruote[i])
            self.riga.append(self.ritardatari[j]+" ("+self.ritardatari[j+1]+")")
            self.riga.append(self.ritardatari[j+2]+" ("+self.ritardatari[j+3]+")")
            self.riga.append(self.ritardatari[j+4]+" ("+self.ritardatari[j+5]+")")
            print self.riga
            iter=self.model.append(self.riga)
            j=j+6

